package com.wzy.sort8;

import java.util.Arrays;

/**
 * @author wzy
 * @Date: 2022/1/30 15:19
 * @Description: 希尔排序实质上就是插入排序的增强版，希尔排序将数组分隔成n组来进行插入排序，直至该数组宏观上有序，最后再进行插入排序时就不用移动那么多次位置了～
 * 代码思路：希尔增量一般是gap = gap / 2，只是比普通版插入排序多了这么一个for循环而已。
 */
public class XiErSort {
    public static void main(String[] args) {
        int[] nums = {5, 1, 8, 2, 6, 7, 3, 4};
        shellSort(nums);
        System.out.println(Arrays.toString(nums));
    }

    public static void shellSort(int[] array) {
        // 增量每次都/2
        for (int step = array.length / 2; step > 0; step /= 2) {
            for (int i = step; i < array.length; i++) {
                int j = i;
                int temp = array[j];
                // j - step 就是代表与它同组隔壁的元素
                while (j - step >= 0 && array[j - step] > temp) {
                    array[j] = array[j - step];
                    j = j - step;
                }
                array[j] = temp;
            }
        }
    }
}
